package data_structure.泛型generic;

/**
 * 泛型类<类型实参>变量名//定义一个泛型类引用
 * new 泛型类<类型实参>(构造方法实参)//实例化一个泛型类对象
 * MyArray<Integer> list = new MyArray<Integer>();
 * 泛型只能接受类，所有的基本数据类型必须使用包装类
 *
 * @param <T>
 */

/**
 *
 * @param <T>
 *     泛型是将数据类型参数化进行传递
 *     使用<T>表示当前类是一个泛型类
 *     泛型目前为止的优点：数据类型参数化，编译时自动进行类型检查和转换
 *
 */

/**
 *
 * @param <T>
 *     在编译过程中，将所有的T替换为Object这种机制，称为擦除机制
 */
public class MyArray2 <T>{
    public T[] array = (T[])new Object[10];
    public T getPos(int pos){
        return this.array[pos];
    }
    public void setVal(int pos,T val){
        this.array[pos] = val;
    }

    public static void main(String[] args) {
        MyArray2<Integer> myArray2 = new MyArray2<>();
        myArray2.setVal(0,10);
        int ret = myArray2.getPos(1);
        System.out.println(ret);
        myArray2.setVal(2, Integer.valueOf("sdf"));
    }
}
